home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / CIncludes / QD3DIO.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-12  |  23.6 KB  |  818 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                              **
  3.  **     Module:        QD3DIO.h                                                 **                    
  4.  **                                                                              **
  5.  **                                                                              **
  6.  **     Purpose:    QuickDraw 3D IO API                                         **        
  7.  **                                                                              **
  8.  **                                                                              **
  9.  **                                                                              **
  10.  **     Copyright (C) 1992-1997 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                              **
  12.  **                                                                              **
  13.  *****************************************************************************/
  14. #ifndef QD3DIO_h
  15. #define QD3DIO_h
  16.  
  17. #include "QD3D.h"
  18. #include "QD3DDrawContext.h"
  19. #include "QD3DView.h"
  20.  
  21. #if defined(PRAGMA_ONCE) && PRAGMA_ONCE
  22.     #pragma once
  23. #endif  /*  PRAGMA_ONCE  */
  24.  
  25. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  26.  
  27. #if defined(__xlc__) || defined(__XLC121__)
  28.     #pragma options enum=int
  29.     #pragma options align=power
  30. #elif defined(__MWERKS__)
  31.     #pragma enumsalwaysint on
  32.     #pragma options align=native
  33. #elif defined(__MRC__) || defined(__SC__)
  34.     #if __option(pack_enums)
  35.         #define PRAGMA_ENUM_RESET_QD3DIO 1
  36.     #endif
  37.     #pragma options(!pack_enums)
  38.     #pragma options align=power
  39. #endif
  40.  
  41. #endif  /* OS_MACINTOSH */
  42.  
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif  /* __cplusplus */
  46.  
  47. /******************************************************************************
  48.  **                                                                              **
  49.  **                                    Basic Types                                 **                                                
  50.  **                                                                              **
  51.  *****************************************************************************/
  52.  
  53. typedef unsigned char    TQ3Uns8;    /* 1 byte unsigned integer                 */ 
  54. typedef signed   char    TQ3Int8;    /* 1 byte signed integer                 */ 
  55. typedef unsigned short    TQ3Uns16;    /* 2 byte unsigned integer                 */ 
  56. typedef signed   short    TQ3Int16;    /* 2 byte signed integer                 */ 
  57. typedef unsigned long    TQ3Uns32;    /* 4 byte unsigned integer                 */
  58. typedef signed   long    TQ3Int32;    /* 4 byte signed integer                 */
  59.  
  60. typedef struct TQ3Uns64 {
  61. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  62.     unsigned long    hi;
  63.     unsigned long     lo;
  64. #else
  65.     unsigned long     lo;
  66.     unsigned long    hi;
  67. #endif /* OS_MACINTOSH */
  68. } TQ3Uns64;                            /* 8 byte unsigned integer                 */
  69.  
  70. typedef struct TQ3Int64 { 
  71. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  72.     signed long        hi; 
  73.     unsigned long    lo; 
  74. #else
  75.     unsigned long    lo; 
  76.     signed long        hi; 
  77. #endif /* OS_MACINTOSH */
  78. } TQ3Int64;                            /* 8 byte signed integer                 */
  79.  
  80. typedef float            TQ3Float32;    /* 4 byte floating point number             */
  81. typedef double            TQ3Float64;    /* 8 byte floating point number             */
  82.  
  83. typedef TQ3Uns32        TQ3Size;
  84.  
  85. /******************************************************************************
  86.  **                                                                              **
  87.  **                                    File Types                                 **
  88.  **                                                                              **
  89.  *****************************************************************************/
  90.  
  91. typedef enum TQ3FileModeMasks {
  92.     kQ3FileModeNormal        = 0,
  93.     kQ3FileModeStream        = 1 << 0,
  94.     kQ3FileModeDatabase        = 1 << 1,
  95.     kQ3FileModeText            = 1 << 2
  96. } TQ3FileModeMasks;
  97.  
  98. typedef unsigned long TQ3FileMode;
  99.  
  100. /******************************************************************************
  101.  **                                                                              **
  102.  **                                    Method Types                             **
  103.  **                                                                              **
  104.  *****************************************************************************/
  105.  
  106. /*
  107.  *    IO Methods
  108.  *
  109.  *    The IO system treats all objects as groups of typed information.
  110.  *    When you register your element or attribute, the "elementType" is the 
  111.  *    binary type of your object, the "elementName" the ascii type.
  112.  *    
  113.  *    All objects in the metafile are made up of a "root" or parent object which
  114.  *    defines the instantiated object type. You may define the format of your 
  115.  *    data any way you wish as long as you use the primitives types above and the
  116.  *    routines below.
  117.  *
  118.  *    Root Objects are often appended with additional child objects, called 
  119.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  120.  *    
  121.  *    Writing is straightforward: an object traverses itself any other objects 
  122.  *    that make it up, then writes its own data. Writing uses two methods: 
  123.  *    TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
  124.  *
  125.  *    The TQ3XObjectTraverseMethod method should:
  126.  *    + First, Determine if the data should be written 
  127.  *        - if you don't want to write out your object after examining your
  128.  *            data, return kQ3Success in your Traverse method without calling
  129.  *            any other submit calls.
  130.  *     + Next, calculate the size of your object on disk
  131.  *     + Gather whatever state from the view you need to preserve
  132.  *         - you may access the view state NOW, as the state of the
  133.  *             view duing your TQ3XObjectWriteMethod will not be valid. You may
  134.  *             pass a temporary buffer to your write method.
  135.  *     + Submit your view write data using Q3View_SubmitWriteData
  136.  *         - note that you MUST call this before any other "_Submit" call.
  137.  *         - you may pass in a "deleteMethod" for your data. This method
  138.  *             will be called whether or not your write method succeeds or fails.
  139.  *     + Submit your subobjects to the view
  140.  *     
  141.  *     The TQ3XObjectWriteMethod method should:
  142.  *     + Write your data format to the file using the primitives routines below.
  143.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  144.  *             method will be called upon exit of your write method.
  145.  *
  146.  *    Reading is less straightforward because your root object and
  147.  *    any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
  148.  *    is an implicit state contained in the file while reading, which you must 
  149.  *    be aware of. When you first enter the read method, you must physically 
  150.  *    read in your data format using the primitives routines until
  151.  *    
  152.  *    Q3File_IsEndOfData(file) == kQ3True
  153.  *    
  154.  *    Generally, your data format should be self-descriptive such that you do not
  155.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  156.  *    However, this call is useful for determining zero-sized object or 
  157.  *    determining the end of an object's data.
  158.  *    
  159.  *    Once you have read in all the data, you may collect subobjects. A metafile
  160.  *    object ONLY has subobjects if it is in a container. The call
  161.  *    
  162.  *    Q3File_IsEndOfContainer(file)
  163.  *    
  164.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  165.  *    exist.
  166.  *    
  167.  *    At this point, you may use
  168.  *    
  169.  *    Q3File_GetNextObjectType
  170.  *    Q3File_IsNextObjectOfType
  171.  *    Q3File_ReadObject
  172.  *    Q3File_SkipObject
  173.  *    
  174.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  175.  *    is kQ3True.
  176.  * 
  177.  */
  178.  
  179.  
  180. /*
  181.  * IO Methods
  182.  */
  183. #define kQ3XMethodTypeObjectFileVersion        Q3_METHOD_TYPE('v','e','r','s') /* version */
  184. #define kQ3XMethodTypeObjectTraverse        Q3_METHOD_TYPE('t','r','v','s') /* byte count */
  185. #define kQ3XMethodTypeObjectTraverseData    Q3_METHOD_TYPE('t','r','v','d') /* byte count */
  186. #define kQ3XMethodTypeObjectWrite            Q3_METHOD_TYPE('w','r','i','t') /* Dump info to file */
  187. #define kQ3XMethodTypeObjectReadData        Q3_METHOD_TYPE('r','d','d','t') /* Read info from file into buffer or, attach read data to parent */ 
  188. #define kQ3XMethodTypeObjectRead            Q3_METHOD_TYPE('r','e','a','d')
  189. #define kQ3XMethodTypeObjectAttach            Q3_METHOD_TYPE('a','t','t','c')
  190.  
  191. /*
  192.  *    TQ3XObjectTraverseMethod
  193.  *
  194.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  195.  *    object. Sorry, custom objects will be available in the next major revision.
  196.  *
  197.  *    The "data" is a pointer to your internal element data.
  198.  *
  199.  *    The view is the current traversal view.
  200.  */
  201. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectTraverseMethod)(
  202.     TQ3Object            object,
  203.     void                *data,
  204.     TQ3ViewObject        view);
  205.  
  206. /*
  207.  *  TQ3XObjectTraverseDataMethod
  208.  */
  209. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectTraverseDataMethod)(
  210.     TQ3Object            object,
  211.     void                *data,
  212.     TQ3ViewObject        view);
  213.  
  214. /*
  215.  *  TQ3XObjectWriteMethod
  216.  */
  217. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectWriteMethod)(
  218.     const void            *object,
  219.     TQ3FileObject        file);
  220.  
  221. /*
  222.  *  Custom object writing 
  223.  */
  224. typedef void (QD3D_CALLBACK *TQ3XDataDeleteMethod)(
  225.     void                    *data);
  226.  
  227. QD3D_EXPORT TQ3Status QD3D_CALL Q3XView_SubmitWriteData(
  228.     TQ3ViewObject            view,
  229.     TQ3Size                    size,    
  230.     void                    *data,
  231.     TQ3XDataDeleteMethod    deleteData);
  232.  
  233. QD3D_EXPORT TQ3Status QD3D_CALL Q3XView_SubmitSubObjectData(
  234.     TQ3ViewObject            view,
  235.     TQ3XObjectClass            objectClass,
  236.     unsigned long            size,
  237.     void                    *data,
  238.     TQ3XDataDeleteMethod    deleteData);
  239.  
  240. /*
  241.  *  TQ3XObjectReadMethod
  242.  */
  243. typedef TQ3Object (QD3D_CALLBACK *TQ3XObjectReadMethod)(
  244.     TQ3FileObject        file);
  245.  
  246. /*
  247.  *    TQ3XObjectReadDataMethod
  248.  *
  249.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  250.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  251.  *
  252.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  253.  */
  254. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectReadDataMethod)(
  255.     TQ3Object            parentObject,
  256.     TQ3FileObject        file);
  257.  
  258. /*
  259.  *  TQ3XObjectAttachMethod
  260.  */
  261. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectAttachMethod)(
  262.     TQ3Object            childObject,
  263.     TQ3Object            parentObject);
  264.  
  265.  
  266. /******************************************************************************
  267.  **                                                                              **
  268.  **                                Versioning                                     **
  269.  **                                                                              **
  270.  *****************************************************************************/
  271.  
  272. #define Q3FileVersion(majorVersion, minorVersion)                    \
  273.     (TQ3FileVersion) ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) |     \
  274.                        ((TQ3Uns32) minorVersion & 0xFFFF))
  275.  
  276. typedef unsigned long            TQ3FileVersion;
  277. #define kQ3FileVersionCurrent    Q3FileVersion(1, 5)
  278.  
  279.  
  280. /******************************************************************************
  281.  **                                                                              **
  282.  **                                File Routines                                 **
  283.  **                                                                              **
  284.  *****************************************************************************/
  285. /*
  286.  *  Creation and accessors
  287.  */
  288. QD3D_EXPORT TQ3FileObject QD3D_CALL Q3File_New(
  289.     void);
  290.  
  291. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetStorage(
  292.     TQ3FileObject        file,
  293.     TQ3StorageObject    *storage);
  294.  
  295. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SetStorage(
  296.     TQ3FileObject        file,
  297.     TQ3StorageObject    storage);
  298.  
  299. /*
  300.  *  Opening, and accessing "open" state, closing/cancelling
  301.  */
  302. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_OpenRead(
  303.     TQ3FileObject        file,
  304.     TQ3FileMode            *mode);
  305.  
  306. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_OpenWrite(
  307.     TQ3FileObject        file,
  308.     TQ3FileMode            mode);
  309.  
  310. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_IsOpen(
  311.     TQ3FileObject        file,
  312.     TQ3Boolean            *isOpen);
  313.  
  314. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetMode(
  315.     TQ3FileObject        file,
  316.     TQ3FileMode            *mode);
  317.  
  318. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetVersion(
  319.     TQ3FileObject        file,
  320.     TQ3FileVersion        *version);
  321.  
  322. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_Close(
  323.     TQ3FileObject        file);
  324.  
  325. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_Cancel(
  326.     TQ3FileObject        file);
  327.  
  328. /*
  329.  *  Writing (Application)
  330.  */
  331. QD3D_EXPORT TQ3Status QD3D_CALL Q3View_StartWriting(
  332.     TQ3ViewObject         view,
  333.     TQ3FileObject        file);
  334.  
  335. QD3D_EXPORT TQ3ViewStatus QD3D_CALL Q3View_EndWriting(
  336.     TQ3ViewObject         view);
  337.  
  338. /*
  339.  *  Reading (Application)
  340.  */
  341. QD3D_EXPORT TQ3ObjectType QD3D_CALL Q3File_GetNextObjectType(
  342.     TQ3FileObject        file);
  343.  
  344. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsNextObjectOfType(
  345.     TQ3FileObject        file,
  346.     TQ3ObjectType        ofType);
  347.  
  348. QD3D_EXPORT TQ3Object QD3D_CALL Q3File_ReadObject(
  349.     TQ3FileObject        file);
  350.  
  351. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SkipObject(
  352.     TQ3FileObject        file);
  353.  
  354. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsEndOfData(
  355.     TQ3FileObject        file);
  356.  
  357. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsEndOfContainer(
  358.     TQ3FileObject        file,
  359.     TQ3Object            rootObject);
  360.  
  361. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsEndOfFile(
  362.     TQ3FileObject        file);
  363.  
  364. /*    
  365.  *  External file references
  366.  */    
  367. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_MarkAsExternalReference(
  368.     TQ3FileObject        file,
  369.     TQ3SharedObject        sharedObject);
  370.  
  371. QD3D_EXPORT TQ3GroupObject QD3D_CALL Q3File_GetExternalReferences(
  372.     TQ3FileObject            file);
  373.  
  374. /*    
  375.  *  Tracking editing in read-in objects with custom elements
  376.  */    
  377. QD3D_EXPORT TQ3Status QD3D_CALL Q3Shared_ClearEditTracking(
  378.     TQ3SharedObject        sharedObject);
  379.     
  380. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3Shared_GetEditTrackingState(
  381.     TQ3SharedObject        sharedObject);
  382.  
  383. /*    
  384.  *  Reading objects inside a group one-by-one
  385.  */    
  386. typedef enum TQ3FileReadGroupStateMasks {
  387.     kQ3FileReadWholeGroup        = 0,
  388.     kQ3FileReadObjectsInGroup    = 1 << 0,
  389.     kQ3FileCurrentlyInsideGroup    = 1 << 1
  390. } TQ3FileReadGroupStateMasks;
  391.  
  392. typedef unsigned long TQ3FileReadGroupState;
  393.  
  394. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SetReadInGroup(
  395.     TQ3FileObject            file,
  396.     TQ3FileReadGroupState    readGroupState);
  397.     
  398. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetReadInGroup(
  399.     TQ3FileObject            file,
  400.     TQ3FileReadGroupState    *readGroupState);
  401.  
  402.  
  403. /*
  404.  *  Idling
  405.  */
  406. typedef TQ3Status (QD3D_CALLBACK *TQ3FileIdleMethod)(
  407.     TQ3FileObject        file,
  408.     const void            *idlerData);
  409.  
  410. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SetIdleMethod(
  411.     TQ3FileObject        file,
  412.     TQ3FileIdleMethod    idle,
  413.     const void            *idleData);
  414.     
  415.  
  416. /******************************************************************************
  417.  **                                                                              **
  418.  **                                Primitives Routines                             **
  419.  **                                                                              **
  420.  *****************************************************************************/
  421.  
  422. QD3D_EXPORT TQ3Status QD3D_CALL Q3NewLine_Write(
  423.     TQ3FileObject        file);
  424.  
  425. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns8_Read(
  426.     TQ3Uns8                *data,
  427.     TQ3FileObject        file);
  428.  
  429. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns8_Write(
  430.     const TQ3Uns8        data,
  431.     TQ3FileObject        file);
  432.  
  433. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns16_Read(
  434.     TQ3Uns16            *data,
  435.     TQ3FileObject        file);
  436.  
  437. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns16_Write(
  438.     const TQ3Uns16        data,
  439.     TQ3FileObject        file);
  440.  
  441. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns32_Read(
  442.     TQ3Uns32            *data,
  443.     TQ3FileObject        file);
  444.         
  445. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns32_Write(
  446.     const TQ3Uns32        data,
  447.     TQ3FileObject        file);
  448.     
  449. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int8_Read(
  450.     TQ3Int8                *data,
  451.     TQ3FileObject        file);
  452.  
  453. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int8_Write(
  454.     const TQ3Int8        data,
  455.     TQ3FileObject        file);
  456.  
  457. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int16_Read(
  458.     TQ3Int16            *data,
  459.     TQ3FileObject        file);
  460.  
  461. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int16_Write(
  462.     const TQ3Int16        data,
  463.     TQ3FileObject        file);
  464.  
  465. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int32_Read(
  466.     TQ3Int32            *data,
  467.     TQ3FileObject        file);
  468.             
  469. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int32_Write(
  470.     const TQ3Int32        data,
  471.     TQ3FileObject        file);
  472.             
  473. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns64_Read(
  474.     TQ3Uns64            *data,
  475.     TQ3FileObject        file);
  476.         
  477. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns64_Write(
  478.     const TQ3Uns64        data,
  479.     TQ3FileObject        file);
  480.  
  481. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int64_Read(
  482.     TQ3Int64            *data,
  483.     TQ3FileObject        file);
  484.         
  485. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int64_Write(
  486.     const TQ3Int64        data,
  487.     TQ3FileObject        file);
  488.  
  489. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float32_Read(
  490.     TQ3Float32            *data,
  491.     TQ3FileObject        file);
  492.  
  493. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float32_Write(
  494.     const TQ3Float32    data,
  495.     TQ3FileObject        file);
  496.  
  497. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float64_Read(
  498.     TQ3Float64            *data,
  499.     TQ3FileObject        file);
  500.  
  501. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float64_Write(
  502.     const TQ3Float64    data,
  503.     TQ3FileObject        file);
  504.  
  505. QD3D_EXPORT TQ3Size QD3D_CALL Q3Size_Pad(
  506.     TQ3Size                size);
  507.  
  508. /*
  509.  *  Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  510.  */
  511. QD3D_EXPORT TQ3Status QD3D_CALL Q3String_Read(
  512.     char                *data,
  513.     unsigned long        *length,
  514.     TQ3FileObject        file);
  515.  
  516. QD3D_EXPORT TQ3Status QD3D_CALL Q3String_Write(
  517.     const char            *data,
  518.     TQ3FileObject        file);
  519.  
  520. /* 
  521.  *  This call will read Q3Size_Pad(size) bytes,
  522.  *    but only place size bytes into data.
  523.  */
  524. QD3D_EXPORT TQ3Status QD3D_CALL Q3RawData_Read(
  525.     unsigned char        *data,
  526.     unsigned long        size,
  527.     TQ3FileObject        file);
  528.  
  529. /* 
  530.  *  This call will write Q3Size_Pad(size) bytes,
  531.  *    adding 0's to pad to the nearest 4 byte boundary.
  532.  */
  533. QD3D_EXPORT TQ3Status QD3D_CALL Q3RawData_Write(
  534.     const unsigned char    *data,
  535.     unsigned long        size,
  536.     TQ3FileObject        file);
  537.  
  538. /******************************************************************************
  539.  **                                                                              **
  540.  **                        Convenient Primitives Routines                         **
  541.  **                                                                              **
  542.  *****************************************************************************/
  543.  
  544. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point2D_Read(
  545.     TQ3Point2D                    *point2D,
  546.     TQ3FileObject                file);
  547.  
  548. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point2D_Write(
  549.     const TQ3Point2D            *point2D,
  550.     TQ3FileObject                file);
  551.  
  552. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point3D_Read(
  553.     TQ3Point3D                    *point3D,
  554.     TQ3FileObject                file);
  555.  
  556. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point3D_Write(
  557.     const TQ3Point3D            *point3D,
  558.     TQ3FileObject                file);
  559.     
  560. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint3D_Read(
  561.     TQ3RationalPoint3D            *point3D,
  562.     TQ3FileObject                file);
  563.  
  564. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint3D_Write(
  565.     const TQ3RationalPoint3D    *point3D,
  566.     TQ3FileObject                file);
  567.  
  568. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint4D_Read(
  569.     TQ3RationalPoint4D            *point4D,
  570.     TQ3FileObject                file);
  571.  
  572. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint4D_Write(
  573.     const TQ3RationalPoint4D    *point4D,
  574.     TQ3FileObject                file);
  575.  
  576. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector2D_Read(
  577.     TQ3Vector2D                    *vector2D,
  578.     TQ3FileObject                file);
  579.  
  580. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector2D_Write(
  581.     const TQ3Vector2D            *vector2D,
  582.     TQ3FileObject                file);
  583.  
  584. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector3D_Read(
  585.     TQ3Vector3D                    *vector3D,
  586.     TQ3FileObject                file);
  587.  
  588. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector3D_Write(
  589.     const TQ3Vector3D            *vector3D,
  590.     TQ3FileObject                file);
  591.  
  592. QD3D_EXPORT TQ3Status QD3D_CALL Q3Matrix4x4_Read(
  593.     TQ3Matrix4x4                *matrix4x4,
  594.     TQ3FileObject                file);
  595.  
  596. QD3D_EXPORT TQ3Status QD3D_CALL Q3Matrix4x4_Write(
  597.     const TQ3Matrix4x4            *matrix4x4,
  598.     TQ3FileObject                file);
  599.  
  600. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent2D_Read(
  601.     TQ3Tangent2D                *tangent2D,
  602.     TQ3FileObject                file);
  603.  
  604. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent2D_Write(
  605.     const TQ3Tangent2D            *tangent2D,
  606.     TQ3FileObject                file);
  607.  
  608. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent3D_Read(
  609.     TQ3Tangent3D                *tangent3D,
  610.     TQ3FileObject                file);
  611.  
  612. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent3D_Write(
  613.     const TQ3Tangent3D            *tangent3D,
  614.     TQ3FileObject                file);
  615.  
  616. /*    
  617.  *  This call affects only text Files - it is a no-op in binary files 
  618.  */
  619. QD3D_EXPORT TQ3Status QD3D_CALL Q3Comment_Write(
  620.     char                        *comment,
  621.     TQ3FileObject                file);
  622.  
  623. /******************************************************************************
  624.  **                                                                              **
  625.  **                                Unknown Object                                 **
  626.  **                                                                              **
  627.  **        Unknown objects are generated when reading files which contain         **
  628.  **        custom data which has not been registered in the current             **
  629.  **        instantiation of QuickDraw 3D.                                         **
  630.  **                                                                              **
  631.  *****************************************************************************/
  632.  
  633. QD3D_EXPORT TQ3ObjectType QD3D_CALL Q3Unknown_GetType(
  634.     TQ3UnknownObject        unknownObject);
  635.  
  636. QD3D_EXPORT TQ3Status QD3D_CALL Q3Unknown_GetDirtyState(
  637.     TQ3UnknownObject        unknownObject,
  638.     TQ3Boolean                *isDirty);
  639.  
  640. QD3D_EXPORT TQ3Status QD3D_CALL Q3Unknown_SetDirtyState(
  641.     TQ3UnknownObject        unknownObject,
  642.     TQ3Boolean                isDirty);
  643.  
  644.  
  645. /******************************************************************************
  646.  **                                                                              **
  647.  **                            Unknown Text Routines                             **
  648.  **                                                                              **
  649.  *****************************************************************************/
  650.  
  651. typedef struct TQ3UnknownTextData {
  652.     char                    *objectName;    /* '\0' terminated */
  653.     char                    *contents;        /* '\0' terminated */
  654. } TQ3UnknownTextData;
  655.  
  656. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownText_GetData(
  657.     TQ3UnknownObject        unknownObject,
  658.     TQ3UnknownTextData        *unknownTextData);
  659.  
  660. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownText_EmptyData(
  661.     TQ3UnknownTextData        *unknownTextData);
  662.  
  663.  
  664. /******************************************************************************
  665.  **                                                                              **
  666.  **                            Unknown Binary Routines                             **
  667.  **                                                                              **
  668.  *****************************************************************************/
  669.  
  670. typedef struct TQ3UnknownBinaryData {
  671.     TQ3ObjectType            objectType;
  672.     unsigned long            size;
  673.     TQ3Endian                byteOrder;
  674.     char                    *contents;
  675. } TQ3UnknownBinaryData;
  676.  
  677. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_GetData(
  678.     TQ3UnknownObject        unknownObject,
  679.     TQ3UnknownBinaryData    *unknownBinaryData);
  680.  
  681. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_EmptyData(
  682.     TQ3UnknownBinaryData    *unknownBinaryData);
  683.  
  684. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_GetTypeString(
  685.     TQ3UnknownObject    unknownObject,
  686.     char                **typeString);
  687.     
  688. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_EmptyTypeString(
  689.     char    **typeString);
  690.  
  691.  
  692. /******************************************************************************
  693.  **                                                                              **
  694.  **                            ViewHints routines                                 **
  695.  **                                                                              **
  696.  **        ViewHints are an object in a metafile to give you some hints on how     **
  697.  **        to render a scene.    You may create a view with any of the objects     **
  698.  **        retrieved from it, or you can just throw it away.                     **
  699.  **                                                                              **
  700.  **        To write a view hints to a file, create a view hints object from a     **
  701.  **        view and write the view hints.                                         **
  702.  **                                                                              **
  703.  *****************************************************************************/
  704.  
  705. QD3D_EXPORT TQ3ViewHintsObject QD3D_CALL Q3ViewHints_New(
  706.     TQ3ViewObject            view);
  707.  
  708. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetRenderer(
  709.     TQ3ViewHintsObject        viewHints,
  710.     TQ3RendererObject        renderer);
  711.  
  712. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetRenderer(
  713.     TQ3ViewHintsObject        viewHints,
  714.     TQ3RendererObject        *renderer);
  715.  
  716. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetCamera(
  717.     TQ3ViewHintsObject        viewHints,
  718.     TQ3CameraObject            camera);
  719.  
  720. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetCamera(
  721.     TQ3ViewHintsObject        viewHints,
  722.     TQ3CameraObject            *camera);
  723.  
  724. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetLightGroup(
  725.     TQ3ViewHintsObject        viewHints,
  726.     TQ3GroupObject            lightGroup);
  727.  
  728. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetLightGroup(
  729.     TQ3ViewHintsObject        viewHints,
  730.     TQ3GroupObject            *lightGroup);
  731.  
  732. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetAttributeSet(
  733.     TQ3ViewHintsObject        viewHints,
  734.     TQ3AttributeSet            attributeSet);
  735.  
  736. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetAttributeSet(
  737.     TQ3ViewHintsObject        viewHints,
  738.     TQ3AttributeSet            *attributeSet);
  739.  
  740. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetDimensionsState(
  741.     TQ3ViewHintsObject        viewHints,
  742.     TQ3Boolean                isValid);
  743.     
  744. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetDimensionsState(
  745.     TQ3ViewHintsObject        viewHints,
  746.     TQ3Boolean                *isValid);
  747.  
  748. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetDimensions(
  749.     TQ3ViewHintsObject        viewHints,
  750.     unsigned long            width,
  751.     unsigned long            height);
  752.  
  753. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetDimensions(
  754.     TQ3ViewHintsObject        viewHints,
  755.     unsigned long            *width,
  756.     unsigned long            *height);
  757.  
  758. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetMaskState(
  759.     TQ3ViewHintsObject        viewHints,
  760.     TQ3Boolean                isValid);
  761.  
  762. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetMaskState(
  763.     TQ3ViewHintsObject        viewHints,
  764.     TQ3Boolean                *isValid);
  765.  
  766. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetMask(    
  767.     TQ3ViewHintsObject        viewHints,
  768.     const TQ3Bitmap            *mask);
  769.  
  770. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetMask(    
  771.     TQ3ViewHintsObject        viewHints,
  772.     TQ3Bitmap                *mask);
  773.  
  774. /* 
  775.  *  Call Q3Bitmap_Empty when done with the mask    
  776.  */
  777.  
  778. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetClearImageMethod(
  779.     TQ3ViewHintsObject                viewHints,
  780.     TQ3DrawContextClearImageMethod    clearMethod);
  781.  
  782. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetClearImageMethod(
  783.     TQ3ViewHintsObject                viewHints,
  784.     TQ3DrawContextClearImageMethod    *clearMethod);
  785.  
  786. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetClearImageColor(
  787.     TQ3ViewHintsObject        viewHints,
  788.     const TQ3ColorARGB         *color);
  789.  
  790. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetClearImageColor(
  791.     TQ3ViewHintsObject        viewHints,
  792.     TQ3ColorARGB             *color);
  793.  
  794.  
  795. #ifdef __cplusplus
  796. }
  797. #endif    /* __cplusplus */
  798.  
  799. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  800.  
  801. #if defined(__xlc__) || defined(__XLC121__)
  802.     #pragma options enum=reset
  803.     #pragma options align=reset
  804. #elif defined(__MWERKS__)
  805.     #pragma enumsalwaysint reset
  806.     #pragma options align=reset
  807. #elif defined(__MRC__) || defined(__SC__)
  808.     #if PRAGMA_ENUM_RESET_QD3DIO
  809.         #pragma options(pack_enums)
  810.         #undef PRAGMA_ENUM_RESET_QD3DIO
  811.     #endif
  812.     #pragma options align=reset
  813. #endif
  814.  
  815. #endif  /* OS_MACINTOSH */
  816.  
  817. #endif /* QD3DIO_h */
  818.